home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / Half-Life Model Viewer / src / StudioModel.h < prev    next >
C/C++ Source or Header  |  1999-10-20  |  3KB  |  106 lines

  1. /***
  2. *
  3. *    Copyright (c) 1998, Valve LLC. All rights reserved.
  4. *    
  5. *    This product contains software technology licensed from Id 
  6. *    Software, Inc. ("Id Technology").  Id Technology (c) 1996 Id Software, Inc. 
  7. *    All Rights Reserved.
  8. *
  9. ****/
  10.  
  11. #ifndef INCLUDED_STUDIOMODEL
  12. #define INCLUDED_STUDIOMODEL
  13.  
  14.  
  15.  
  16. #ifndef byte
  17. typedef unsigned char byte;
  18. #endif // byte
  19.  
  20.  
  21.  
  22. #include "mathlib.h"
  23. #include "studio.h"
  24.  
  25.  
  26.  
  27. class StudioModel
  28. {
  29. public:
  30.     studiohdr_t                *getStudioHeader () const { return m_pstudiohdr; }
  31.     studiohdr_t                *getTextureHeader () const { return m_ptexturehdr; }
  32.     studiohdr_t                *getAnimHeader (int i) const { return m_panimhdr[i]; }
  33.  
  34.     void                    UploadTexture( mstudiotexture_t *ptexture, byte *data, byte *pal, int name );
  35.     void                    FreeModel ();
  36.     studiohdr_t                *LoadModel( char *modelname );
  37.     bool                    PostLoadModel ( char *modelname );
  38.     bool                    SaveModel ( char *modelname );
  39.     void                    DrawModel( void );
  40.     void                    AdvanceFrame( float dt );
  41.     int                        SetFrame (int nFrame);
  42.  
  43.     void                    ExtractBbox( float *mins, float *maxs );
  44.  
  45.     int                        SetSequence( int iSequence );
  46.     int                        GetSequence( void );
  47.     void                    GetSequenceInfo( float *pflFrameRate, float *pflGroundSpeed );
  48.  
  49.     float                    SetController( int iController, float flValue );
  50.     float                    SetMouth( float flValue );
  51.     float                    SetBlending( int iBlender, float flValue );
  52.     int                        SetBodygroup( int iGroup, int iValue );
  53.     int                        SetSkin( int iValue );
  54.  
  55.     void                    scaleMeshes (float scale);
  56.     void                    scaleBones (float scale);
  57.  
  58. private:
  59.     // entity settings
  60.     vec3_t                    m_origin;
  61.     vec3_t                    m_angles;    
  62.     int                        m_sequence;            // sequence index
  63.     float                    m_frame;            // frame
  64.     int                        m_bodynum;            // bodypart selection    
  65.     int                        m_skinnum;            // skin group selection
  66.     byte                    m_controller[4];    // bone controllers
  67.     byte                    m_blending[2];        // animation blending
  68.     byte                    m_mouth;            // mouth position
  69.     bool                    m_owntexmodel;        // do we have a modelT.mdl ?
  70.  
  71.     // internal data
  72.     studiohdr_t                *m_pstudiohdr;
  73.     mstudiomodel_t            *m_pmodel;
  74.  
  75.     studiohdr_t                *m_ptexturehdr;
  76.     studiohdr_t                *m_panimhdr[32];
  77.  
  78.     vec4_t                    m_adj;                // FIX: non persistant, make static
  79.  
  80.     void                    CalcBoneAdj( void );
  81.     void                    CalcBoneQuaternion( int frame, float s, mstudiobone_t *pbone, mstudioanim_t *panim, float *q );
  82.     void                    CalcBonePosition( int frame, float s, mstudiobone_t *pbone, mstudioanim_t *panim, float *pos );
  83.     void                    CalcRotations ( vec3_t *pos, vec4_t *q, mstudioseqdesc_t *pseqdesc, mstudioanim_t *panim, float f );
  84.     mstudioanim_t            *GetAnim( mstudioseqdesc_t *pseqdesc );
  85.     void                    SlerpBones( vec4_t q1[], vec3_t pos1[], vec4_t q2[], vec3_t pos2[], float s );
  86.     void                    SetUpBones ( void );
  87.  
  88.     void                    DrawPoints( void );
  89.  
  90.     void                    Lighting (float *lv, int bone, int flags, vec3_t normal);
  91.     void                    Chrome (int *chrome, int bone, vec3_t normal);
  92.  
  93.     void                    SetupLighting( void );
  94.  
  95.     void                    SetupModel ( int bodypart );
  96. };
  97.  
  98.  
  99.  
  100. extern vec3_t g_vright;        // needs to be set to viewer's right in order for chrome to work
  101. extern float g_lambert;        // modifier for pseudo-hemispherical lighting
  102. extern StudioModel g_studioModel;
  103.  
  104.  
  105.  
  106. #endif // INCLUDED_STUDIOMODEL